﻿using System.Windows;
using Sinacor.UI.Bovespa.Alocacao.Presenter;
using Sinacor.Infra.UI.Controls.SmartClient;
using Sinacor.UI.Bovespa.Clientes.View.SmartClient;
using Sinacor.UI.Bovespa.Ordens.View.SmartClient;
using System.Windows.Input;
using Sinacor.Infra.UI.Common;
using System;

namespace Sinacor.UI.Bovespa.Alocacao.View.SmartClient
{
    /// <summary>
    /// Tela de Consulta Ze com Ze
    /// </summary>
    public partial class ConsultaZecomZe : SinacorWindow, IAlocacaoProprietaria
    {
        #region Atributos

        /// <summary>
        /// Presenter de Alocacao Proprietaria
        /// </summary>
        public Presenter.AlocacaoProprietaria PresenterAlocacaoProprietaria { get; set; }

        //private Model.Ocorrencia ocorrencia = null;
        private string _style = string.Empty;

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor Padrão
        /// </summary>
        public ConsultaZecomZe()
        {
            InitializeComponent();

            // Inicialize a presenter no construtor
            PresenterAlocacaoProprietaria = new Presenter.AlocacaoProprietaria(this);
            
            // Configure a presenter no DataContext da janela (para facilitar os bindings)
            this.DataContext = PresenterAlocacaoProprietaria;

            // Configurando o Type de novos itens da grid, so necessario quando a grid permitir inclusao
            // Obs: Esta property foi configurada no Code-Behind porque quando configurada no XAML o type
            // nao e encontrado.

            //Aba Ocorrencias Sinacor
            this.dtgOcorrenciasSI.NewItemType = typeof(Model.NegocioAlocacaoProprietaria);
            this.dtgSolucaoSI.NewItemType = typeof(Model.NegocioAlocacaoProprietaria);

            //Aba Ocorrencias Central Depositária
            this.dtgOcorrenciasCD.NewItemType = typeof(Model.NegocioAlocacaoProprietaria);
            this.dtgSolucaoCD.NewItemType = typeof(Model.NegocioAlocacaoProprietaria);

            BtnAlocacaoImportacao.Click += new RoutedEventHandler(BtnAlocacaoImportacao_Click);
            BtnCancelarImportacao.Click += new RoutedEventHandler(BtnCancelarImportacao_Click);

            this.AfterInitialize += new RoutedEventHandler(ConsultaZecomZe_AfterInitialize);
            this.Closed += new EventHandler(ConsultaZecomZe_Closed);
        }

        #endregion

        #region Event Handlers

        private void ConsultaZecomZe_AfterInitialize(object sender, RoutedEventArgs e)
        {
            this.PresenterAlocacaoProprietaria.Inicializar();

            CboLayoutsImportacao.Items.Add(this.FindResource("Bovespa.Alocacao.Label.PlanilhaExcelXLS").ToString());
            CboLayoutsImportacao.SelectedIndex = 0;
        }

        private void ConsultaZecomZe_Closed(object sender, EventArgs e)
        {
            PresenterAlocacaoProprietaria.Dispose();
        }

        #endregion

        #region IAlocacaoProprietaria Members

        /// <summary>
        /// Atualiza combo de "Data Pregao"
        /// </summary>
        public void AtualizarCombosDataPregao()
        {
            this.cmbPesquisaDataPregaoSI.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
            this.cmbPesquisaDataPregaoCD.UpdateTarget(SinacorComboBox.ItemsSourceProperty);
        }       

        /// <summary>
        /// Informar que o arquivo não contem dados ou não está no formato correto
        /// </summary>
        public void InformarArquivoVazio()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.PlanilhaVazia").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informa que arquivo não é válido
        /// </summary>
        public void InformarErroImportacao()
        {
            this.Dispatcher.BeginInvoke((Action)delegate()
            {
                FlpAlocacaoImportacao.IsEnabled = true;
                BtnAlocacaoImportacao.IsEnabled = true;
                BtnCancelarImportacao.IsEnabled = false;

                SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.ErroImportacao").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
            });
        }

        /// <summary>
        /// Informa pesquisa sem resultado
        /// </summary>
        public void InformarNenhumRegistroEncontrado()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.PesquisaSemRetorno").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informa que Ocorrência foi solucionada
        /// </summary>
        public void InformarOcorrenciaSolucionada()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.OcorrenciaSolucionada").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Informa que operação foi realizada com sucesso.
        /// </summary>
        public void InformarCancelamentoSucesso()
        {
            SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.SucessoOperacao").ToString(), SinacorMessageBoxButton.Ok, SinacorMessageBoxImage.Information);
        }

        /// <summary>
        /// Atualiza grid de "Negócios para Solução" na aba Ocorrências Sinacor
        /// </summary>
        public void AtualizarGridSolucaoNegocioSinacor()
        {
            this.dtgSolucaoSI.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        /// <summary>
        /// Atualiza grid "Ocorrências" Sinacor
        /// </summary>
        public void AtualizarGridOcorrenciasSinacor()
        {
            this.dtgOcorrenciasSI.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        /// <summary>
        /// Atualiza grid de "Negócios para Solução" na aba Ocorrências Central Depositária
        /// </summary>
        public void AtualizarGridSolucaoNegocioCentralDepositaria()
        {
            this.dtgSolucaoCD.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        /// <summary>
        /// Atualiza grid "Ocorrências" Central Depositária
        /// </summary>
        public void AtualizarGridOcorrenciasCentralDepositaria()
        {
            this.dtgOcorrenciasCD.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        public void DesabilitarPesquisaOcorrenciaSolucionada()
        {
            expPesquisaCD.IsExpanded = false;
        }

        public void HabilitarCancelamentoProcesso()
        {
            this.Dispatcher.Invoke((Action)delegate()
            {
                BtnCancelarImportacao.IsEnabled = true;
            },
           System.Windows.Threading.DispatcherPriority.ApplicationIdle);
        }

        public void InformarImportacaoCancelada()
        {
            this.Dispatcher.Invoke((Action)delegate()
            {
                SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.ImportacaoCancelada").ToString(),
                                       SinacorMessageBoxButton.Ok,
                                       SinacorMessageBoxImage.Exclamation);
            },
           System.Windows.Threading.DispatcherPriority.ApplicationIdle);
        }

        public void InformarImportacaoConcluida()
        {
            this.Dispatcher.Invoke((Action)delegate()
            {
                FlpAlocacaoImportacao.IsEnabled = true;
                BtnAlocacaoImportacao.IsEnabled = true;
                BtnCancelarImportacao.IsEnabled = false;

                ShowUserWaitingProcess();

                PresenterAlocacaoProprietaria.ConsultarOcorrenciasCentralDepositaria();

                AtualizarGridOcorrenciasCentralDepositaria();

                HideUserWaitingProcess();

                SinacorMessageBox.Show(this.FindResource("Bovespa.Alocacao.Message.ImportacaoSucesso").ToString(),
                                       SinacorMessageBoxButton.Ok,
                                       SinacorMessageBoxImage.Information);
            },
            System.Windows.Threading.DispatcherPriority.ApplicationIdle);
        }

        public void AtualizarStatus()
        {
            this.Dispatcher.Invoke((Action)delegate()
            {
                if (String.IsNullOrEmpty(PresenterAlocacaoProprietaria.StatusProcesso.Step))
                {
                    PgbAlocacaoProgresso.ProgressBarText = " ";
                }
                else
                {
                    PgbAlocacaoProgresso.ProgressBarText = FindResource(PresenterAlocacaoProprietaria.StatusProcesso.Step).ToString();
                }

                PgbAlocacaoProgresso.UpdateTarget(SinacorProgressBar.ValueProperty);
            });
        }

        #endregion

        #region Metodos Privados

        #region Aba Sinacor

        private void PesquisarCliente_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            PesquisaClientes pesquisaClientes = new PesquisaClientes();

            Clientes.Model.PesquisaCliente filtroPesq = new Sinacor.UI.Bovespa.Clientes.Model.PesquisaCliente() { Apelido = txtPesquisaCliente.Text };

            pesquisaClientes.CarregaParametros(Sinacor.UI.Bovespa.Clientes.Model.Enum.JanelaChamada.CasamentoManual, filtroPesq);

            pesquisaClientes.Owner = this;
            pesquisaClientes.SetMenuHeader("Bovespa.Alocacao.Label.ConsultaZecomZe");
            pesquisaClientes.ShowDialog();

            if (pesquisaClientes.PesquisaClienteModel.Codigo > 0)
            {
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.CodigoCliente = pesquisaClientes.PesquisaClienteModel.Codigo;
                txtPesquisaCliente.UpdateTarget(SinacorTextBox.TextProperty);
            }
        }

        private void BtnPesquisarAtivoSI_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo
            {
                Codigo = this.txtPesquisaAtivoSI.Text,
                DataPregao = ((Model.Calendario)this.cmbPesquisaDataPregaoSI.SelectedItem).DataPregao
            };

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Alocacao.Label.ConsultaZecomZe");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
            }

            this.txtPesquisaAtivoSI.UpdateTarget(SinacorTextBox.TextProperty);
        }

        private void BtnPesquisarSI_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.ShowUserWaitingProcess();
            this.PesquisarOcorrenciasSinacor();
            this.HideUserWaitingProcess();
        }

        private void PesquisarOcorrenciasSinacor()
        {
            this.ClearServiceErrors();
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));

            if (chkExcluirOrdensDiscricionariasSI.IsChecked.Value)
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.ExcluirDiscricionariasDist = true;
            else
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.ExcluirDiscricionariasDist = false;

            //Limpa Grid de Solução
            this.PresenterAlocacaoProprietaria.ListaSolucaoNegocioSinacor.Clear();
            this.dtgSolucaoSI.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);

            this.PresenterAlocacaoProprietaria.ConsultarOcorrenciasSinacor();

            this.AtualizarGridOcorrenciasSinacor();
        }

        private void BtnNovaPesquisaSI_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.LimparCamposPesquisaSI();
        }

        private void LimparCamposPesquisaSI()
        {
            this.ClearServiceErrors();

            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.Ativo = string.Empty;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.CodigoCliente = null;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.ExcluirDiscricionariasDist = null;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaSinacor.Preco = null;

            this.txtPesquisaCliente.UpdateTarget(SinacorInt32TextBox.ValueProperty);
            this.txtPesquisaAtivoSI.UpdateTarget(SinacorTextBox.TextProperty);            
            this.txtPesquisaPrecoSI.UpdateTarget(SinacorDecimalTextBox.ValueProperty);
            this.cmbPesquisaDataPregaoSI.SelectedIndex = 0;

            this.PresenterAlocacaoProprietaria.ListaOcorrenciasSinacor.Clear();
            this.PresenterAlocacaoProprietaria.ListaSolucaoNegocioSinacor.Clear();

            this.chkExcluirOrdensDiscricionariasSI.IsChecked = false;

            this.dtgOcorrenciasSI.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            this.dtgSolucaoSI.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }

        private void MenuCancelarOcorrenciaSI_Click(object sender, RoutedEventArgs e)
        {
            this.ShowUserWaitingProcess();

            PresenterAlocacaoProprietaria.CancelarOcorrenciaSinacor(dtgOcorrenciasSI.SelectedItem as Model.Ocorrencia);

            PesquisarOcorrenciasSinacor();

            this.HideUserWaitingProcess();
        }

        private void dtgOcorrenciasSI_ApplyingStyle(object sender, ApplyStyleEventArgs e)
        {
            if (e.ItemInfo.Item != null)
            {
                _style = string.Empty;

                // Verifica se quem disparou o evento foi uma linha
                if (e.OriginalSource is BaseRow)
                {
                    Model.Ocorrencia ocorrencia = (e.ItemInfo.Item as Model.Ocorrencia);

                    if (ocorrencia.Cancelado == true)
                        _style = BaseRow.GridRowBusiness12;

                    // Nao podem ser Cancelados
                    if (ocorrencia.QuantidadeDiferenteNegocio == true)
                        _style = BaseRow.GridRowBusiness06;

                    // So podem ser Cancelados
                    if (ocorrencia.ControlePorta == true)
                        _style = BaseRow.GridRowBusiness13;
                }

                e.Style = _style;
            }
        }

        private void ContextMenu_CancelarOcorrenciaSI_Loaded(object sender, RoutedEventArgs e)
        {
            ((System.Windows.Controls.MenuItem)(sender)).IsEnabled = (dtgOcorrenciasSI.SelectedItems.Count > 0);
        }

        private void dtgOcorrenciasSI_BufferedSelectionChanged(object sender, BufferedEventArgs<System.Windows.Controls.SelectionChangedEventArgs> e)
        {            
            Model.Ocorrencia ocorrencia = ((System.Windows.Controls.Primitives.MultiSelector)(sender)).SelectedItem as Model.Ocorrencia;

            if (ocorrencia != null)
            {
                if (!ocorrencia.ControlePorta)
                {
                    this.ShowUserWaitingProcess();

                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Ativo = ocorrencia.Ativo;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.CodigoCliente = ocorrencia.CodigoCliente;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.DataNegocio = ocorrencia.DataNegocio;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.NaturezaOperacao = ocorrencia.NaturezaOperacao;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Negocio = ocorrencia.Negocio;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Preco = (decimal)ocorrencia.Preco;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.CodigoCasamento = ocorrencia.CodigoCasamento;

                    PresenterAlocacaoProprietaria.ConsultarSolucaoNegocioSinacor(PresenterAlocacaoProprietaria.FiltroSolucaoNegocio);
                    AtualizarGridSolucaoNegocioSinacor();

                    this.HideUserWaitingProcess();
                }
            }            
        }

        private void MenuSolucionarOcorrenciaSI_Click(object sender, RoutedEventArgs e)
        {
            if (dtgOcorrenciasSI.SelectedItems != null)
            {
                // Atribui valor selecionado na datagrid Ocorrencia
                PresenterAlocacaoProprietaria.Ocorrencia = dtgOcorrenciasSI.SelectedItem as Model.Ocorrencia;
                
                // Atribui valores selecionados na datagrid Solucao
                ModelCollection<Model.NegocioAlocacaoProprietaria> solucao = new ModelCollection<Model.NegocioAlocacaoProprietaria>();
                foreach (object item in dtgSolucaoSI.SelectedItems)
                {
                    solucao.Add((Model.NegocioAlocacaoProprietaria)item);
                }
                PresenterAlocacaoProprietaria.Ocorrencia.SolucaoNegocio = solucao;

                PresenterAlocacaoProprietaria.SolucionarOcorrencia();

                PresenterAlocacaoProprietaria.ListaSolucaoNegocioSinacor.Clear();
                PresenterAlocacaoProprietaria.ConsultarOcorrenciasSinacor();

                AtualizarGridSolucaoNegocioSinacor();
                AtualizarGridOcorrenciasSinacor();
            }
        }

        private void MenuSolucionarOcorrenciaSI_Loaded(object sender, RoutedEventArgs e)
        {
            ((SinacorContextMenuItem)sender).IsEnabled = (dtgSolucaoSI.SelectedIndex != -1);
        }

        #endregion

        #region Aba Central Depositaria

        private void BtnPesquisarAtivoCD_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            Ordens.Model.Titulo modelTitulo = new Ordens.Model.Titulo
            {
                Codigo = this.txtPesquisaAtivoCD.Text,
                Mercado = null,
                DataPregao = ((Model.Calendario)this.cmbPesquisaDataPregaoCD.SelectedItem).DataPregao
            };

            PesquisaTitulo pesquisaTitulo = new PesquisaTitulo();
            pesquisaTitulo.CarregarParametros(modelTitulo, null);
            pesquisaTitulo.Owner = this;
            pesquisaTitulo.SetMenuHeader("Bovespa.Alocacao.Label.ConsultaZecomZe");
            pesquisaTitulo.ShowDialog();

            if (pesquisaTitulo.TituloEscolhido != null)
            {
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.Ativo = pesquisaTitulo.TituloEscolhido.Codigo;
            }

            this.txtPesquisaAtivoCD.UpdateTarget(SinacorTextBox.TextProperty);
        }

        private void BtnPesquisarCD_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.ShowUserWaitingProcess();
            this.PesquisarOcorrenciasCentralDepositaria();
            this.HideUserWaitingProcess();
        }

        private void PesquisarOcorrenciasCentralDepositaria()
        {
            this.ClearServiceErrors();
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));
            this.MoveFocus(new TraversalRequest(FocusNavigationDirection.Previous));

            if (chkExcluirOrdensDiscricionariasCD.IsChecked.Value)
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.ExcluirDiscricionariasDist = true;
            else
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.ExcluirDiscricionariasDist = false;

            if (chkIncluirNegociosCanceladosCD.IsChecked.Value)
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.IncluirNegociosCancelados = true;
            else
                this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.IncluirNegociosCancelados = false;

            //Limpa Grid de Solução
            this.PresenterAlocacaoProprietaria.ListaSolucaoNegocioCentDepositaria.Clear();
            this.dtgSolucaoCD.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);

            this.PresenterAlocacaoProprietaria.ConsultarOcorrenciasCentralDepositaria();

            this.AtualizarGridOcorrenciasCentralDepositaria();

            ExpImportacao.IsExpanded = false;
        }

        private void BtnNovaPesquisaCD_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            this.LimparCamposPesquisaCD();
        }

        private void LimparCamposPesquisaCD()
        {
            this.ClearServiceErrors();

            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.Ativo = string.Empty;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.ExcluirDiscricionariasDist = null;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.IncluirNegociosCancelados = null;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.Negocio = null;
            this.PresenterAlocacaoProprietaria.FiltroOcorrenciaCentralDepositaria.Arquivo = string.Empty;

            this.txtPesquisaAtivoCD.UpdateTarget(SinacorTextBox.TextProperty);
            this.txtPesquisaNegocioCD.UpdateTarget(SinacorInt32TextBox.ValueProperty);
            this.cmbPesquisaDataPregaoCD.SelectedIndex = 0;

            this.PresenterAlocacaoProprietaria.ListaOcorrenciasCentralDepositaria.Clear();
            this.PresenterAlocacaoProprietaria.ListaSolucaoNegocioCentDepositaria.Clear();                     

            this.chkExcluirOrdensDiscricionariasCD.IsChecked = false;
            this.chkIncluirNegociosCanceladosCD.IsChecked = false;

            this.dtgOcorrenciasCD.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
            this.dtgSolucaoCD.UpdateTarget(SinacorDataGrid.ItemsSourceProperty);
        }
        
        private void dtgOcorrenciasCD_ApplyingStyle(object sender, ApplyStyleEventArgs e)
        {
            if (e.ItemInfo.Item != null)
            {
                // Limpando style
                _style = string.Empty;

                // Verifica se quem disparou o evento foi uma linha
                if (e.OriginalSource is BaseRow)
                {
                    Model.Ocorrencia ocorrencia = (e.ItemInfo.Item as Model.Ocorrencia);

                    // Verifica se esta Cancelado
                    if (ocorrencia.Cancelado == true)
                        _style = BaseRow.GridRowBusiness12;

                    // Nao podem ser Cancelados
                    //if (ocorrencia.QuantidadeDiferenteNegocio == true)
                    //    _style = BaseRow.GridRowBusiness06;

                    // So podem ser Cancelados
                    //if (ocorrencia.ControlePorta == true)
                    //    _style = BaseRow.GridRowBusiness13;
                }

                // Retornando style
                e.Style = _style;
            }
        }

        private void MenuCancelarOcorrenciaCD_Click(object sender, RoutedEventArgs e)
        {
            this.ShowUserWaitingProcess();

            this.PresenterAlocacaoProprietaria.CancelarOcorrenciaCentralDepositaria(dtgOcorrenciasCD.SelectedItem as Model.Ocorrencia);

            PesquisarOcorrenciasCentralDepositaria();

            this.HideUserWaitingProcess();
        }

        private void ContextMenu_CancelarOcorrenciaCD_Loaded(object sender, RoutedEventArgs e)
        {
            ((System.Windows.Controls.MenuItem)(sender)).IsEnabled = (dtgOcorrenciasCD.SelectedItems.Count > 0);
        }

        private void dtgOcorrenciasCD_BufferedSelectionChanged(object sender, BufferedEventArgs<System.Windows.Controls.SelectionChangedEventArgs> e)
        {
            Model.Ocorrencia ocorrencia = ((System.Windows.Controls.Primitives.MultiSelector)(sender)).SelectedItem as Model.Ocorrencia;

            if (ocorrencia != null)
            {
                if (!ocorrencia.ControlePorta)
                {
                    this.ShowUserWaitingProcess();

                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Ativo = ocorrencia.Ativo;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.CodigoCliente = ocorrencia.CodigoCliente;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.DataNegocio = ocorrencia.DataNegocio;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.NaturezaOperacao = ocorrencia.NaturezaOperacao;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Negocio = ocorrencia.Negocio;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.Preco = (decimal)ocorrencia.Preco;
                    PresenterAlocacaoProprietaria.FiltroSolucaoNegocio.CodigoCasamento = ocorrencia.CodigoCasamento;

                    PresenterAlocacaoProprietaria.ConsultarSolucaoNegocioCentralDepositaria(PresenterAlocacaoProprietaria.FiltroSolucaoNegocio);
                    
                    AtualizarGridSolucaoNegocioCentralDepositaria();

                    this.HideUserWaitingProcess();
                }
            }
        }

        private void MenuSolucionarOcorrenciaCD_Click(object sender, RoutedEventArgs e)
        {
            if (dtgOcorrenciasCD.SelectedItems != null)
            {
                PresenterAlocacaoProprietaria.Ocorrencia = dtgOcorrenciasCD.SelectedItem as Model.Ocorrencia;
                PresenterAlocacaoProprietaria.Ocorrencia.SolucaoNegocio = new ModelCollection<Model.NegocioAlocacaoProprietaria>();

                foreach (var item in dtgSolucaoCD.SelectedItems)
                {
                    this.PresenterAlocacaoProprietaria.Ocorrencia.SolucaoNegocio.Add(dtgSolucaoCD.SelectedItem as Model.NegocioAlocacaoProprietaria);
                }

                PresenterAlocacaoProprietaria.SolucionarOcorrencia();

                PresenterAlocacaoProprietaria.ListaSolucaoNegocioCentDepositaria.Clear();
                PresenterAlocacaoProprietaria.ConsultarOcorrenciasCentralDepositaria();

                AtualizarGridOcorrenciasCentralDepositaria();
                AtualizarGridSolucaoNegocioCentralDepositaria();
            }
        }

        private void MenuSolucionarOcorrenciaCD_Loaded(object sender, RoutedEventArgs e)
        {
            ((SinacorContextMenuItem)sender).IsEnabled = (dtgSolucaoCD.SelectedIndex != -1);
        }

        private void BtnAlocacaoImportacao_Click(object sender, RoutedEventArgs e)
        {
            this.ClearServiceErrors();
            FlpAlocacaoImportacao.IsEnabled = false;
            BtnAlocacaoImportacao.IsEnabled = false;
            PresenterAlocacaoProprietaria.ImportarOcorrenciasCentralDepositaria();
        }

        private void BtnCancelarImportacao_Click(object sender, RoutedEventArgs e)
        {
            PresenterAlocacaoProprietaria.CancelarProcesso();
        }

        #endregion             

        #endregion
    }
}
